package com.intelligent.mapper;

import com.intelligent.pojo.BomInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author lenovo
* @description 针对表【bom_info(BOM信息表)】的数据库操作Mapper
* @createDate 2025-08-28 09:01:55
* @Entity com.intelligent.pojo.BomInfo
*/
public interface BomInfoMapper extends BaseMapper<BomInfo> {

    /**
     * 根据ID查询BOM信息（关联产品信息和单位信息）
     *
     * @param bomId BOM ID
     * @return BOM信息
     */
    BomInfo getBomInfoById(@Param("bomId") Long bomId);

    /**
     * 分页查询BOM信息（关联产品信息和单位信息）
     *
     * @param page 分页参数
     * @param bomCode BOM编码模糊查询（可选）
     * @param bomName BOM名称模糊查询（可选）
     * @param productCode 产品编码模糊查询（可选）
     * @param productName 产品名称模糊查询（可选）
     * @param status 状态精确查询（可选）
     * @return 分页结果
     */
    IPage<BomInfo> pageBomInfo(Page<BomInfo> page,
                               @Param("bomCode") String bomCode,
                               @Param("bomName") String bomName,
                               @Param("productCode") String productCode,
                               @Param("productName") String productName,
                               @Param("status") Integer status);


    /**
     * 导出BOM信息列表为Excel（关联产品信息和单位信息）
     *
     * @param bomCode BOM编码模糊查询（可选）
     * @param bomName BOM名称模糊查询（可选）
     * @param productCode 产品编码模糊查询（可选）
     * @param productName 产品名称模糊查询（可选）
     * @param status 状态精确查询（可选）
     * @return BOM信息列表
     */
    List<BomInfo> exportBomInfoToExcel(@Param("bomCode") String bomCode,
                                       @Param("bomName") String bomName,
                                       @Param("productCode") String productCode,
                                       @Param("productName") String productName,
                                       @Param("status") Integer status);

    /**
     * 插入BOM信息
     *
     * @param bomInfo BOM信息实体
     * @return 影响行数
     */
    int insertBomInfo(BomInfo bomInfo);

    /**
     * 获取最大的BOM编号
     *
     * @return 最大BOM编号，如果没有数据则返回null
     */
    String getMaxBomCode();

    /**
     * 更新BOM信息
     *
     * @param bomInfo BOM信息实体
     * @return 影响行数
     */
    int updateBomInfo(BomInfo bomInfo);

    /**
     * 根据BOM ID删除BOM信息
     *
     * @param bomId BOM ID
     * @return 影响行数
     */
    int deleteByBomId(@Param("bomId") Long bomId);
}




